home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Almathera Ten Pack 2: CDPD 1
/
Almathera Ten on Ten - Disc 2: CDPD 1.iso
/
pd
/
176-200
/
179
/
unixutil
/
tee.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-03-13
|
2KB
|
70 lines
/* tee.c - copy standard input to standard output and one other file. *
* This is useful for splitting (tapping) the pipe. Presumes you *
* are using a shell program which can pipe the output from one *
* program into the input of another or some other pipe device, *
* but also can be used to make 2 copies of a file. *
* *
* tee <file1 >file2 file3 *
* prog1 file1 | tee file3 | prog2 ... *
* *
* tee (C) 1988 by Gary L. Brant *
* *
* :ts=8 */
#include <stdio.h>
#include <fcntl.h>
#define MAXLINE 256
#define ERROR -1
void copy ();
int close (), open (), read (), write ();
int err, out2; /* file handles */
main (argc, argv)
int argc;
char *argv[];
{
err = fileno (stderr);
if (argc != 2) {
write (err, "usage: tee <file1 >file2 file3\n", 31);
exit (20);
}
/* Manx documentation (lib.35) claims that if O_TRUNC is used, */
/* then O_CREAT is not needed; HOG_WASH; open() first deletes */
/* the file & then complains ENOENT (File does not exist!!! */
if ((out2 = open (argv[1], O_WRONLY | O_TRUNC | O_CREAT)) == ERROR) {
write (err, "tee: cant open ", 15);
write (err, argv[1], strlen (argv[1]));
write (err, "\n", 1);
exit (20);
}
copy (out2);
close (out2);
}
/* copy stdin to stdout and one other file */
void copy (out2)
int out2;
{
int p, in, out1;
char line[MAXLINE];
in = fileno (stdin);
out1 = fileno (stdout);
while ((p = read (in, line, MAXLINE)) > 0) {
write (out1, line, p);
write (out2, line, p);
}
}
_wb_parse ()
{
}